今天來換換口味,算是個小插曲加預告XD
下篇再繼續我們的照片分享網誌~~
( 只剩 Post 文章就完成了 ! )
Q:網頁爬蟲是什麼:
爬蟲是一個將網路上的檔案下載下來然後處理、資料分析的程式,我們在網路上看到的網頁、圖片或影片等,都算是一個檔案,只是透過瀏覽器變成我們看到的結果 ~
Q:這要幹嘛 !?
一定會有人想說爬別人網頁幹嘛XD,那我說我覺得最有價值的好了~~
爬股票、財報,我們可以用這些資料做量化分析,雖然過去績效不等於未來,但也是有一點點參考價值哦 ~
我們會用到的工具 - Request
Requests模組功能:可以用來讀取網頁原始碼,再藉由正規表達式取得符合資料
直接來抓個網頁就知道了,我以我的目錄頁為範例
import requests
url ='https://ithelp.ithome.com.tw/users/20111479/ironman/1790'
html = requests.get(url)
print(html.text)
我們看他print出什麼呢 ...
用以上這段程式碼就可以抓取我的主頁HTML,可再另外加上 html.status_code == 200的條件加以判斷伺服器傳回來的狀態碼沒問題再print,做加一步的檢查
自訂HTTP Headers:
Headers 為請求和回應的核心,包含User的瀏覽器、請求頁面、server等資訊,自訂Headers可用程式模擬瀏覽器操作,避過網頁檢查
發送POST請求:
Session / Cookie:
憑證儲存在User端的瀏覽器為Cookie,產生在Server端的為Session
(可以以requests.Session()為網站建立Session)
好那我們來個小挑戰 ...
進入PTT Gossip版抓取網頁資料前,需要按同意的BUTTON,那怎麼辦 ?
製造一個假的通過方式騙騙它 ...
import requests
from bs4 import BeautifulSoup
payload = {
'from': 'https://www.ptt.cc/bbs/Gossiping/index.html',
'yes': 'yes'
#按我同意 button的value設yes
}
headers = {
'user-agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_3) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/56.0.2924.87 Safari/537.36'
}
rs = requests.Session()
rs.post('https://www.ptt.cc/ask/over18', data=payload, headers=headers)
#成功進入後再Get頁面
res = rs.get('https://www.ptt.cc/bbs/Gossiping/index.html', headers=headers)
soup = BeautifulSoup(res.text, 'html.parser')
items = soup.select('.r-ent')
for item in items:
#單純印text
print(item.select('.date')[0].text, item.select('.author')[0].text, item.select('.title')[0].text)
還有一個很常用的package ~~
Beautiful Soup 讓開發者撰寫非常少量的程式碼,就可以快速解析網頁 HTML 碼,再應由寫好的功能去抽取想要的HTML Tag,就可以進行網頁解析、資料分析囉 ~
那為了省麻煩,我這邊建一個html變數來塞HTML該有的東西
html = """
<html><head><title>網頁標題</title></head>
<p class="header"><h2>文件標題</h2></p>
<div class="content">
<div class="item1">
<a href="http://example.com/one" class="red" id="link1">First</a>
<a href="http://example.com/two" class="green" id="link2">Second</a>
</div>
</div>
"""
那接著就可以來 import 這次的工具囉 ~
注意:對應的tag以 .
來抓!
from bs4 import BeautifulSoup
sp = BeautifulSoup(html,'html.parser')
print("--sp.title--")
print(sp.title)
print("------------")
print("--sp.find('h2')--")
print(sp.find('h2'))
print("------------")
print("--sp.find_all('a')--")
print(sp.find_all('a'))
print("------------")
print("--針對class為red--")
print(sp.find_all("a", {"class":"red"}))
print("------------")
print("--依href做find--")
data1=sp.find("a", {"href":"http://example.com/one"})
print(data1.text) # First
print("------------")
在後面會帶大家抓抓看股票、做簡單的資料分析哦
可以期待一下XD